package com.ww.exercise.coroutine.easy.q4

import kotlinx.coroutines.delay
import kotlinx.coroutines.runBlocking
import kotlinx.coroutines.withTimeoutOrNull
import java.util.Random

data class ApiResult(
    val code: Int,
    val data: List<String>,
    val message: String
)

// 带超时控制的接口调用封装
suspend fun callApiWithTimeout(): List<String> {
    // 设置最大等待时间为3秒
    val timeoutMillis = 3000L

    // 使用withTimeoutOrNull实现超时控制
    val result = withTimeoutOrNull(timeoutMillis) {
        thirdPartyApiCall()
    }

    return if (result != null) {
        println("接口调用成功")
        result.data
    } else {
        // 超时处理
        println("接口超时")
        emptyList() // 返回默认值
    }
}

suspend fun thirdPartyApiCall(): ApiResult {
    // 随机模拟接口响应时间（1-4秒），用于测试超时情况
    val responseTime = Random().nextLong(3000) + 1000
    println("第三方接口开始处理，预计响应时间：${responseTime}ms")

    // 模拟接口处理时间
    delay(responseTime)

    // 模拟正常返回数据
    return ApiResult(
        code = 200,
        data = listOf("结果1", "结果2", "结果3"),
        message = "success"
    )
}

fun main() = runBlocking {
    println("开始调用第三方接口...")
    val data = callApiWithTimeout()
    println("最终获取的数据: $data")
    println("接口调用流程结束")
}